Comment empêcher la modification de certains champs dans une vue ?
Dans la vue de mise à jour, par défaut, tous les champs (à l'exception des clés) sont modifiables. Mais vous pouvez déclarer n'importe quelle propriété en lecture seule ainsi :
Ensuite, vous devez affiner l'action Nouveau pour choisir la vue Creer et l'action de recherche pour la vue MettreAJour. Tout d'abord, il s'agit de définir un contrôleur dans le fichier controllers.xml de votre projet :
<controllername="MonControleur"><actionname="nouveau"class="com.mycompany.myapplication.actions.MyNewAction"image="images/new.gif"on-init="true"keystroke="F2"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action><actionname="recherche"by-default="if-possible"hidden="true"class="com.mycompany.myapplication.actions.MySearchAction"keystroke="F8"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action></controller>
Et puis il faut assigner le nouveau contrôleur à votre module avant d'écrire les deux nouvelles actions. Dans le fichier application.xml, déclarez votre module ainsi :
public class MyNewAction extends NewAction {
public void execute() throws Exception {
getView().setViewName("Create");
super.execute();
}
}
Comment désactiver une propriété lors de la mise à jour, mais pas lors de la création ?
Vous pouvez affiner les action de création et de recherche. Tout d'abord, définissez un contrôleur ainsi :
<controllername="MonControleur"><actionname="nouveau"class="com.mycompany.myapplication.actions.MyNewAction"image="images/new.gif"on-init="true"keystroke="F2"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action><actionname="recherche"by-default="if-possible"hidden="true"class="com.mycompany.myapplication.actions.MySearchAction"keystroke="F8"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action></controller>
Puis assignez le contrôleur à votre module avant d'écrire le code de vos deux nouvelles actions. Dans le fichier application.xml, déclarez votre module ainsi :
Pour finir, écrire le code des deux actions. Pour MySearchAction :
public class MySearchAction extends SearchByViewKeyAction {
public void execute() throws Exception {
super.execute();
getView().setEditable("myproperty", false);
}
}
Et MyNewAction :
public class MyNewAction extends NewAction {
public void execute() throws Exception {
super.execute();
getView().setEditable("myproperty", true);
}
}
Comment accéder à une propriété qui n'est pas visible dans la vue ?
A partir des vues, vous pouvez obtenir uniquement les données visibles. Mais il est possible, en utilisant la classe MapFacade, d'accéder directement au modèle.
Vous pouvez écrire dans votre action un code approchant :
publicclass MyAction extends ViewBaseAction {publicvoid execute()throwsException{
Invoice invoice = (Invoice) MapFacade.findEntity(getModelName(), getView().getKeyValues());BigDecimal specialDiscount = invoice.getSpecialDiscount();// Special discount n'est pas visible
...
}
...
Table of Contents
Comment...
Comment empêcher la modification de certains champs dans une vue ?
Dans la vue de mise à jour, par défaut, tous les champs (à l'exception des clés) sont modifiables. Mais vous pouvez déclarer n'importe quelle propriété en lecture seule ainsi :Ou, si vous utilisez OX3 :
Comment utiliser des vues différentes pour créer et mettre à jour ?
De manière triviale, vous définissez une vue pour créer et une autre pour la mise à jour, ainsi :Ou, avec OX3 :
Ensuite, vous devez affiner l'action Nouveau pour choisir la vue Creer et l'action de recherche pour la vue MettreAJour. Tout d'abord, il s'agit de définir un contrôleur dans le fichier controllers.xml de votre projet :
Et puis il faut assigner le nouveau contrôleur à votre module avant d'écrire les deux nouvelles actions. Dans le fichier application.xml, déclarez votre module ainsi :
Il ne reste plus qu'à écrire le code des actions. Tout d'abord l'action de recherche MySearchAction :
Et l'action de création MyNewAction :
public class MyNewAction extends NewAction { public void execute() throws Exception { getView().setViewName("Create"); super.execute(); } }Comment désactiver une propriété lors de la mise à jour, mais pas lors de la création ?
Vous pouvez affiner les action de création et de recherche. Tout d'abord, définissez un contrôleur ainsi :Puis assignez le contrôleur à votre module avant d'écrire le code de vos deux nouvelles actions. Dans le fichier application.xml, déclarez votre module ainsi :
Pour finir, écrire le code des deux actions. Pour MySearchAction :
public class MySearchAction extends SearchByViewKeyAction { public void execute() throws Exception { super.execute(); getView().setEditable("myproperty", false); } }Et MyNewAction :public class MyNewAction extends NewAction { public void execute() throws Exception { super.execute(); getView().setEditable("myproperty", true); } }Comment accéder à une propriété qui n'est pas visible dans la vue ?
A partir des vues, vous pouvez obtenir uniquement les données visibles. Mais il est possible, en utilisant la classe MapFacade, d'accéder directement au modèle.Vous pouvez écrire dans votre action un code approchant :